package cn.iotab.iotkit.transport.api.driver;

import cn.iotab.iotkit.transport.api.common.message.msg.CommonPayload;
import cn.iotab.iotkit.transport.api.common.message.msg.rpc.AuthBasicRequestMsg;
import cn.iotab.iotkit.transport.api.common.message.msg.rpc.AuthResponseMsg;
import cn.iotab.iotkit.transport.api.common.message.msg.rpc.AuthX509RequestMsg;
import cn.iotab.iotkit.transport.api.common.message.msg.up.SessionEvent;
import cn.iotab.iotkit.transport.api.common.message.msg.up.SessionInfo;
import cn.iotab.iotkit.transport.api.common.message.msg.up.SessionReportInfo;
import cn.iotab.iotkit.transport.api.common.queue.SendResultCallback;

public interface TransportDriverService {

    /**
     * mqtt userName/password 认证
     */
    void authenticate(AuthBasicRequestMsg msg, SendResultCallback<AuthResponseMsg> callback);

    /**
     * X509 证书认证
     */
    void authenticate(AuthX509RequestMsg msg, SendResultCallback<AuthResponseMsg> callback);

    /**
     * 上行消息，设备对Server请求
     */
    void onDeviceRequestMessage(SessionInfo sessionInfo, CommonPayload msg, SendResultCallback<Void> callback);

    /**
     * 上行消息，设备对Server请求的响应
     */
    void onDeviceResponseMessage(SessionInfo sessionInfo, CommonPayload msg, SendResultCallback<Void> callback);

    /**
     * session状态变更，变更时上报
     */
    void onSessionStateChange(SessionInfo sessionInfo, SessionEvent msg, SendResultCallback<Void> callback);


    /**
     * 上报Session状态，定时上报
     *
     */
    void reportSessionInfo(SessionInfo sessionInfo, SessionReportInfo msg, SendResultCallback<Void> callback);

    /**
     * 注册Session， 不涉及RPC
     *
     */
    DriverSession registerSession(SessionInfo sessionInfo, SessionMsgListener listener);

    /**
     * session状态更新，不涉及RPC
     *
     */
    void sessionActivity(SessionInfo sessionInfo);


    /**
     * 设备离线，取消Session，不涉及RPC
     */
    void deregisterSession(SessionInfo sessionInfo);

}
